package com.whfc.mach.manager;

import com.whfc.mach.dto.*;
import com.whfc.mach.dto.iot.MachWarnRotation;
import com.whfc.mach.entity.AppMachDataLog;
import com.whfc.mach.entity.AppMachOilLog;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @author sun_guodong
 * @description dobbo内部调用 设备数据
 * @date 2020-12-02
 */
public interface MachDataManager {

    /**
     * 初始化设备数据
     *
     * @param machId
     */
    void initMachData(Integer machId);

    /**
     * 初始化设备数据
     *
     * @param machId
     */
    void initMachData(Integer machId, Integer deviceId);

    /**
     * 新增机械硬件数据
     *
     * @param logList
     */
    void addMachData(List<AppMachDataLog> logList);

    /**
     * 新增机械倾斜报警
     *
     * @param deviceId
     * @param warn
     */
    void addMachWarnRotation(Integer deviceId, MachWarnRotation warn);

    /**
     * 新增油位标定数据
     *
     * @param oilLog
     */
    void addMachOilLog(AppMachOilLog oilLog);

    /**
     * 设备的每日数据统计
     *
     * @param machInfo
     * @param date
     */
    void statMachDayData(AppMachInfo machInfo, Date date);

    /**
     * 计算设备油耗
     *
     * @param machId
     * @param date
     * @return
     */
    OilDay computeOil(Integer machId, Date date);

    /**
     * 计算设备一段时间内的油耗
     *
     * @param machId
     * @param date
     * @param startTime
     * @param endTime
     * @return
     */
    OilStat computeOilStat(Integer machId, Date date, Date startTime, Date endTime);

    /**
     * 计算设备一段时间内的油耗
     *
     * @param machInfo
     * @param date
     * @param startTime
     * @param endTime
     * @return
     */
    OilStat computeOilStat(AppMachInfo machInfo, Date date, Date startTime, Date endTime);

    /**
     * 按工时分段计算一天油耗
     *
     * @param machId
     * @param date
     * @return
     */
    List<OilDay> computeOilList(Integer machId, Date date);

    /**
     * 查找设备的每日分段数据
     *
     * @param machId
     * @param date
     * @return
     */
    List<AppMachDaySegDTO> getMachDaySegList(Integer machId, Date date);

    /**
     * 查找一段时间内的历史数据(跨天)
     *
     * @param machInfo
     * @param startTime
     * @param endTime
     * @return
     */
    List<AppMachDaySegDTO> getMachDaySegList(AppMachInfo machInfo, Date startTime, Date endTime);

    /**
     * 获取设备工时的最后一个分段
     *
     * @param machId
     * @param date
     * @return
     */
    AppMachDaySegDTO getLastMachDaySeg(Integer machId, Date date);

    /**
     * 获取设备工时的第一个分段
     *
     * @param machId
     * @param date
     * @return
     */
    AppMachDaySegDTO getFirstMachDaySeg(Integer machId, Date date);

    /**
     * 保存设备工时分段
     *
     * @param machId
     * @param date
     * @param segDTOList
     */
    void saveMachSeg(Integer machId, Date date, List<AppMachDaySegDTO> segDTOList);

    /**
     * 添加离线数据点
     *
     * @param machId
     * @param time
     */
    void addOfflineData(Integer machId, Date time);

    /**
     * 修正硬件数据
     *
     * @param dataList
     */
    void amendDeviceData(List<AppMachDataLog> dataList);
}
